/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	HFieldDef.java
 * 模块说明：	
 * 修改历史：
 * Aug 24, 2007 - lxm - 创建。
 */
package com.hd123.rumba.jsp.table;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.hd123.rumba.util.AccessMode;
import com.hd123.rumba.util.XMLUtil;

/**
 * 字段定义对象
 * 
 * @author lxm
 * 
 */
public class HFieldDef {

  private HDataset dataset;
  private String name;
  private String dataType = VALUE_DATATYPE_TEXT;
  private String permissionId;
  private Boolean invisible = Boolean.FALSE;

  /** {@link #dataType}取值，表示整数。 */
  public static final String VALUE_DATATYPE_INTEGER = "integer";
  /** {@link #dataType}取值，表示价格。 */
  public static final String VALUE_DATATYPE_PRICE = "price";
  /** {@link #dataType}取值，表示金额。 */
  public static final String VALUE_DATATYPE_MONEY = "money";
  /** {@link #dataType}取值，表示比率。 */
  public static final String VALUE_DATATYPE_RATE = "rate";
  /** {@link #dataType}取值，表示数量。 */
  public static final String VALUE_DATATYPE_QUANTITY = "quantity";
  /** {@link #dataType}取值，表示日期。 */
  public static final String VALUE_DATATYPE_DATE = "date";
  /** {@link #dataType}取值，表示时间。 */
  public static final String VALUE_DATATYPE_TIME = "time";
  /** {@link #dataType}取值，表示日期+时间。 */
  public static final String VALUE_DATATYPE_DATETIME = "datetime";
  /** {@link #dataType}取值，表示文本。 */
  public static final String VALUE_DATATYPE_TEXT = "text";
  /** {@link #dataType}取值，表示布尔。 */
  public static final String VALUE_DATATYPE_BOOLEAN = "boolean";

  void writeToXml(Document doc, Element root, AccessMode am) {
    Element e = doc.createElement("fieldDef");
    XMLUtil.writeString(e, "name", this.name);
    XMLUtil.writeString(e, "dataType", this.dataType);
    this.resetInvisible(am);
    XMLUtil.writeBoolean(e, "invisible", this.invisible);
    root.appendChild(e);
  }
  
  void readFromXml(Element e) {
    this.name = XMLUtil.readString(e, "name");
    this.dataType = XMLUtil.readString(e, "dataType");
    this.invisible = XMLUtil.readBoolean(e, "invisible");
  }

  /** 所属数据集 */
  public HDataset getDataset() {
    return dataset;
  }

  void setDataset(HDataset dataset) {
    this.dataset = dataset;
  }

  /** 数据类型。取值参见名为“VALUE_DATATYPE_*”的常量。 */
  public String getDataType() {
    return dataType;
  }

  public void setDataType(String dataType) {
    this.dataType = dataType;
  }

  /** 字段名。 */
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  /** 对应字段权限ID。null表示不控制权限。 */
  public String getPermissionId() {
    return permissionId;
  }

  public void setPermissionId(String permissionId) {
    this.permissionId = permissionId;
  }

  /** 属性：是否不可见。只读。 */
  public Boolean getInvisible() {
    return invisible;
  }
  
  private void resetInvisible(AccessMode am) {
    String permId = this.permissionId;
    if (permId == null)
      this.invisible = Boolean.FALSE;
    else {
      int mode = am.getAccessMode(permId);
      if (mode == -1)
        this.invisible = Boolean.TRUE;
    }
  }

}
